package org.jkuang.qstar.index.dic;

import org.jkuang.qstar.commons.jni.DicMap;

/**
 * 词典转换器，将字符串转换为整形 内存存储采用了jni组件，减少小内存的管理以及内存分配
 * 
 * @author jkuang 2012年11月17日
 *
 */
public class TermsDic {

	boolean ignoreCase = false;
	// dicmap为线程安全的map
	DicMap smap = new DicMap(4);

	public TermsDic(boolean ignoreCase) {
		this.ignoreCase = ignoreCase;
	}
	/**
	 * 将词条加入词典中，转换为一个整形数字
	 * 
	 * @param dic
	 * @return
	 */
	public int add(String dic) {
		if (ignoreCase) {
			dic = dic.toUpperCase();
		}
		int value = smap.get(dic);
		if (value < 0) {
			return this.smap.put(dic);
		} else {
			return value;
		}

	}

	/**
	 * 通过序列号获取已存储的数据
	 * 
	 * @param value
	 * @return
	 */
	public String get(int value) {
		return this.smap.find(value);
	}

	/**
	 * 通过词条获取已转换过的id，若之前为存储过，则返回 Integer.MIN_VALUE
	 * 
	 * @param dic
	 * @return
	 */
	public int get(String dic) {
		if (ignoreCase) {
			dic = dic.toUpperCase();
		}
		return smap.get(dic);
	}

	public int size() {
		return this.smap.maxSeq();
	}
}
